package com.xunfang.dead;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class DeadListener {

    /**
     * 消息确认、消费者可靠性保证
     */
    @RabbitListener(queues = "dlx.queue")
    public void handle(String message) {
        System.out.println("死信消费者收到 dlx.queue 消息：" + message);
    }

//    /**
//     * 消息确认、消费者可靠性保证
//     */
//    @RabbitListener(queues = "confirm.queue")
//    public void handle(String text, Channel channel, Message message) throws IOException {
//        //获取消息属性对象
//        MessageProperties properties = message.getMessageProperties();
//        //获取消息的唯一id
//        long deliveryTag = properties.getDeliveryTag();
//        //默认使用自动应答机制，从队列中获取消息后自动应答队列，队列收到应答后再从队列中移除消费后的消息
//        try {
//            //模拟业务逻辑
//            System.out.println("接收到消息：" + text);
//            //模拟出现异常
//            System.out.println(1 / 0);
//            //消费者手动确认消费消息
//            channel.basicAck(deliveryTag, false);       //收货
//        } catch (Exception e) {
//            //e.printStackTrace();
//            //获取重投标记
//            boolean redelivered = properties.getRedelivered();
//            System.out.println("消息重发标记：" + redelivered);
//            //如果为真就表示已经重投过了
//            if (redelivered) {
//                //消息已经被重投过，拒绝
//                channel.basicReject(deliveryTag, false);
//                System.out.println("消息已经重投过，被拒绝");     //拒绝
//            } else {
//                //消息没有被重投过，重投放到消息队列中
//                channel.basicNack(deliveryTag, false, true);
//                System.out.println("消息没有重投过，进行重投");   //换货
//            }
//        }
//    }
}